iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0
自我挑戰組

馬克的 Kali Linux 與資安學習小筆記系列 第 27

30-27 OWASP Docker Security ( 1 )

  • 分享至 

  • xImage
  •  

https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html

上面這個是 owasp 所提供關於 docker 資安相關的 cheet sheet,接下來我們這篇文章一個一個慢慢來看。

RULE #0 - Keep Host and Docker up to date


這個規則主要是叫我們要『 保持 host 與 docker 』的更新,這個資安規則我們在前面應該都看過不少了。

RULE #1 - Do not expose the Docker daemon socket (even to the containers)


不要將 docker daemon 的 /var/run/docker.sock expose 出去,即使是 container 也一樣,因為這是所有 api 的入口點,這樣可能會發生兩件事 :

  • 如果有個容器被攻擊了,那這時就代表 hacker 可以攻擊所有的 container。

  • expose 出去就代表有可能被連線到,就代表 hacker 可以控制 docker 大腦。

但如果你真的真的要這樣,那使用官方建議的流程 :

following Docker official documentation

RULE #2 - Set a user


當你要啟一個 docker container 時,建議設置非特權 ( unprivileged user ) 使用者。

在不設置的情況下,預設應該都是root帳號 ( 可以用 whoami 指令來看 ),這樣就代表 hacker 一進到 container 中就是最高權限,然後設定使用者可以避免這件事 ( privilege escalation attacks ),雖然privilege escalation attacks 是指 hacker 嘗試升級權限,但這個地方應該和送頭沒兩樣。

它後這裡有三種方法 :

首先第一種是直接 docker run 執行時代入-u 然後下面範例的 4000 為使用者的 UID。

docker run -u 4000 alpine

第二種,就是改在 dockerfile 中。

FROM alpine
RUN groupadd -r myuser && useradd -r -g myuser myuser
<HERE DO WHAT YOU HAVE TO DO AS A ROOT USER LIKE INSTALLING PACKAGES ETC.>
USER myuser

第三種,是在 docker daemon 上開啟 user namespace support,其中 dockerd 就是指 docker daemon。

dockerd --userns-remap="testuser:testuser"

然後如果是在 k8s 裡可以設在security context 中

https://kubernetes.io/docs/tasks/configure-pod-container/security-context/

kind: ...
apiVersion: ...
metadata:
  name: ...
spec:
  ...
  containers:
  - name: ...
    image: ....
    securityContext:
          ...
          runAsNonRoot: true

RULE #3 - Limit capabilities (Grant only specific capabilities, needed by a container)


Linux Kernel Capabilities( Linux Kernel 權限 )是一種機制,它主要的功能就是將 root 權限分解較小的單位,以提高系統的安全性。

一些常見的 linux kernel 的權限如下 :

  • CAP_NET_ADMIN: 管理網絡設置的權限。

  • CAP_SYS_ADMIN: 擁有一般的系統管理權限。

  • CAP_DAC_OVERRIDE: 覆蓋文件權限檢查。

  • CAP_DAC_READ_SEARCH: 閱讀或搜索任何文件,無論權限如何。

  • CAP_SETUID 和 CAP_SETGID: 設置進程的使用者ID和組ID。

在 docker 中你可以使用—cap-add—cap-drop 來進行設定。

docker run --cap-drop all --cap-add CHOWN alpine

不要用 --privileged,它的權限高到幾乎什麼都可以做

RULE #4 - Add –no-new-privileges flag


每一次在 run docker image 時都代--security-opt=no-new-privileges 為了防止escalate privileges attack

當你在運行 docker container 時,它的 process 可能會嘗議升級權限級別 ( 就 hacker ),以獲取更高的權限,然後用這個選擇就可以防止這件事。

RULE #5 - Disable inter-container communication (--icc=false)


在預設的情況下,container 與 container 就算沒有設—network 它是可以透過docker 9 bridged network來進行行溝通,這裡就是建議關掉這個,有需要溝通的再用network來設定。

然後我們可以使用—icc=false來關掉。

docker run --icc=false your_image

上一篇
30-26 Docker - Security Best practices
下一篇
30-28 OWASP Docker Security ( 2 )
系列文
馬克的 Kali Linux 與資安學習小筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言